package com.vcoud.mundialbrasil2014;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;

import com.vcoud.mbrasil2014.R;
import com.vcoud.mundialbrasil2014.adapter.JugadorAdapter;

public class JugadorFragment extends Fragment {
	List<String> listaGrupo;
	List<String> listaHijo;
	Map<String, ArrayList<HashMap<String, String>>> coleccionGrupo;
	ExpandableListView listaExpandible;
	DB db;
	static final String KEY_JUGADOR_IDJUGADOR = "IDJugador";
	static final String KEY_JUGADOR_NOMBRE = "Nombre";
	static final String KEY_JUGADOR_APELLIDO = "Apellido";
	static final String KEY_JUGADOR_DESCRIPCION = "Descripcion";
	static final String KEY_JUGADOR_CLUB = "Club";
	static final String KEY_JUGADOR_NUMERO = "Numero";
	static final String KEY_JUGADOR_POSICION = "Posicion";
	static final String KEY_JUGADOR_FOTO = "Foto";
	static final String KEY_JUGADOR_FK_EQUIPO = "FK_Equipo";
	static final String KEY_JUGADOR_GOL = "Gol";
	static final String KEY_JUGADOR_ASISTENCIA = "Asistencia";
	static final String KEY_JUGADOR_TARJETAAMARILLA = "TarjetaAmarilla";
	static final String KEY_JUGADOR_TARJETAROJA = "TarjetaRoja";
	static final String KEY_JUGADOR_CAPITAN = "Capitan";
	static final String KEY_JUGADOR_LESIONADO = "Lesionado";

	public JugadorFragment() {
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setHasOptionsMenu(true);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_jugador, container,
				false);

		crearGrupo();
		crearColeccion();
		listaExpandible = (ExpandableListView) rootView
				.findViewById(R.id.lista_jugador);
		final JugadorAdapter adapter = new JugadorAdapter(getActivity(),
				listaGrupo, coleccionGrupo);
		listaExpandible.setAdapter(adapter);
		// activar codigo para expandir todos los grupos por default
		// for (int i = 0; i < listaGrupo.size(); i++) {
		// listaExpandible.expandGroup(i);
		// }
		return rootView;
	}

	@Override
	public void onPrepareOptionsMenu(Menu menu) {
		menu.findItem(R.id.action_refresh).setVisible(false);
	}

	@Override
	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
		super.onCreateOptionsMenu(menu, inflater);
		getActivity().getMenuInflater().inflate(R.menu.grupos, menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar actions click
		switch (item.getItemId()) {
		case R.id.grupos_expandir:
			for (int i = 0; i < listaGrupo.size(); i++) {
				listaExpandible.expandGroup(i);
			}
			return true;
		case R.id.grupos_contraer:
			for (int i = 0; i < listaGrupo.size(); i++) {
				listaExpandible.collapseGroup(i);
			}
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	private void crearGrupo() {
		listaGrupo = new ArrayList<String>();
		DB db = new DB(getActivity());
		db.abrir();
		Cursor c = db.obtenerTodosEquipos();
		if (c != null && c.getCount() > 0) {
			if (c.moveToFirst()) {

				do {
					try {
						listaGrupo.add(c.getString(0) + "_" + c.getString(1)
								+ "_" + c.getString(2));
					} catch (SQLException e) {

						e.printStackTrace();
					}
					// agregando elementos al array
				} while (c.moveToNext());
			}
		} else {
			listaGrupo.add("0_"
					+ getActivity().getString(R.string.verificar_conexion)
					+ "_0");
		}
		c.close();
		db.cerrar();
	}

	private void crearColeccion() {
		coleccionGrupo = new LinkedHashMap<String, ArrayList<HashMap<String, String>>>();
		db = new DB(getActivity());
		db.abrir();
		Boolean actualizacion = false;
		Boolean sincronizado = true;
		for (String grupo : listaGrupo) {
			String[] equipo = grupo.split("_");
			Cursor mCursor = db.obtenerJugadoresPorEquipo(Long
					.valueOf(equipo[0]));
			ArrayList<HashMap<String, String>> tmpGrupo = new ArrayList<HashMap<String, String>>();
			if (mCursor != null && mCursor.getCount() > 0) {
				if (mCursor.moveToFirst()) {
					do {
						HashMap<String, String> mGrupo = new HashMap<String, String>();
						try {
							mGrupo.put(KEY_JUGADOR_IDJUGADOR,
									mCursor.getString(0));
							mGrupo.put(KEY_JUGADOR_NOMBRE, mCursor.getString(1));
							mGrupo.put(KEY_JUGADOR_APELLIDO,
									mCursor.getString(2));
							mGrupo.put(KEY_JUGADOR_DESCRIPCION,
									mCursor.getString(3));
							mGrupo.put(KEY_JUGADOR_CLUB, mCursor.getString(4));
							mGrupo.put(KEY_JUGADOR_NUMERO, mCursor.getString(5));
							mGrupo.put(KEY_JUGADOR_POSICION,
									mCursor.getString(6));
							mGrupo.put(KEY_JUGADOR_FOTO, mCursor.getString(7));
							mGrupo.put(KEY_JUGADOR_FK_EQUIPO,
									mCursor.getString(8));
							mGrupo.put(KEY_JUGADOR_GOL, mCursor.getString(9));
							mGrupo.put(KEY_JUGADOR_ASISTENCIA,
									mCursor.getString(10));
							mGrupo.put(KEY_JUGADOR_TARJETAAMARILLA,
									mCursor.getString(11));
							mGrupo.put(KEY_JUGADOR_TARJETAROJA,
									mCursor.getString(12));
							mGrupo.put(KEY_JUGADOR_CAPITAN,
									mCursor.getString(13));
							mGrupo.put(KEY_JUGADOR_LESIONADO,
									mCursor.getString(14));
						} catch (SQLException e) {
							e.printStackTrace();
						}
						tmpGrupo.add(mGrupo);
					} while (mCursor.moveToNext());
					coleccionGrupo.put(grupo, tmpGrupo);
				}
			} else {
				ActualizacionService actualizar = new ActualizacionService(
						getActivity());
				if (!actualizacion) {
					sincronizado = actualizar.actualizarJugador();
					actualizacion = true;
				}
				if (sincronizado) {
					mCursor = db.obtenerJugadoresPorEquipo(Long
							.valueOf(equipo[0]));
					if (mCursor != null && mCursor.getCount() > 0 && mCursor.moveToFirst()) {
						do {
							HashMap<String, String> mGrupo = new HashMap<String, String>();
							try {
								mGrupo.put(KEY_JUGADOR_IDJUGADOR,
										mCursor.getString(0));
								mGrupo.put(KEY_JUGADOR_NOMBRE,
										mCursor.getString(1));
								mGrupo.put(KEY_JUGADOR_APELLIDO,
										mCursor.getString(2));
								mGrupo.put(KEY_JUGADOR_DESCRIPCION,
										mCursor.getString(3));
								mGrupo.put(KEY_JUGADOR_CLUB,
										mCursor.getString(4));
								mGrupo.put(KEY_JUGADOR_NUMERO,
										mCursor.getString(5));
								mGrupo.put(KEY_JUGADOR_POSICION,
										mCursor.getString(6));
								mGrupo.put(KEY_JUGADOR_FOTO,
										mCursor.getString(7));
								mGrupo.put(KEY_JUGADOR_FK_EQUIPO,
										mCursor.getString(8));
								mGrupo.put(KEY_JUGADOR_GOL,
										mCursor.getString(9));
								mGrupo.put(KEY_JUGADOR_ASISTENCIA,
										mCursor.getString(10));
								mGrupo.put(KEY_JUGADOR_TARJETAAMARILLA,
										mCursor.getString(11));
								mGrupo.put(KEY_JUGADOR_TARJETAROJA,
										mCursor.getString(12));
								mGrupo.put(KEY_JUGADOR_CAPITAN,
										mCursor.getString(13));
								mGrupo.put(KEY_JUGADOR_LESIONADO,
										mCursor.getString(14));
							} catch (SQLException e) {
								e.printStackTrace();
							}
							tmpGrupo.add(mGrupo);
						} while (mCursor.moveToNext());

						coleccionGrupo.put(grupo, tmpGrupo);
					}
				} else {
					HashMap<String, String> mGrupo = new HashMap<String, String>();
					mGrupo.put(KEY_JUGADOR_IDJUGADOR, "0");
					mGrupo.put(
							KEY_JUGADOR_NOMBRE,
							getActivity().getString(
									R.string.inicio_sin_conexion));
					mGrupo.put(KEY_JUGADOR_GOL, "0");
					mGrupo.put(KEY_JUGADOR_CLUB, "");
					mGrupo.put(KEY_JUGADOR_POSICION, "");
					tmpGrupo.add(mGrupo);
					coleccionGrupo.put(grupo, tmpGrupo);
				}
			}
			mCursor.close();
		}
		db.cerrar();
	}
}
